using System;
using System.Collections.Generic;

using Atomic.Libraries;

#pragma warning disable

namespace Atomic.Thermodynamics.StateEquations
{
	/// <summary>
	/// A hexagonal unit cell generalization of the BM4 EOS expanded in terms of the two lattice contants (a,c).
	/// </summary>
	/*[Serializable]
	public class HexagonalBirchMurnaghan : IFittedStateEquation
	{
		private double p0, p1, p2, p3, p4, p5;

		private HexagonalBirchMurnaghan(IEnumerable<HexagonalVolumeEnergyPoint> points)
		{
			FittingPoints = new ReadOnlyList<HexagonalVolumeEnergyPoint>(points);
		}

		public static HexagonalBirchMurnaghan Fit(params HexagonalVolumeEnergyPoint[] points)
		{
			throw new NotImplementedException();
		}

		public static HexagonalBirchMurnaghan Fit(IEnumerable<HexagonalVolumeEnergyPoint> points)
		{
			return Fit(new List<HexagonalVolumeEnergyPoint>(points).ToArray());
		}

		public double Energy(double a, double c)
		{
			// Doing the expansion here:
			// https://wiki.fysik.dtu.dk/ase/tutorials/lattice_constant.html
			return p0 + p1 * a + p2 * c + p3 * a * a + p4 * a * c + p5 * c * c;
		}

		public double Energy(double v)
		{
			// Solve minimum energy (a,c) for v.
			throw new NotImplementedException();
		}

		public double Pressure(double v)
		{
			throw new System.NotImplementedException();
		}

		public double BulkModulus(double v)
		{
			throw new System.NotImplementedException();
		}

		public ReadOnlyList<HexagonalVolumeEnergyPoint> FittingPoints
		{
			get;
			private set;
		}

		IEnumerable<IVolumeEnergyPoint> IFittedStateEquation.FittingPoints
		{
			get
			{
				return FittingPoints;
			}
		}

		public double EquilibriumEnergy
		{
			get
			{
				throw new System.NotImplementedException();
			}
		}

		public double EquilibriumVolume
		{
			get
			{
				throw new System.NotImplementedException();
			}
		}

		public double EquilibriumBulkModulus
		{
			get
			{
				throw new System.NotImplementedException();
			}
		}

		public double EquilibriumBulkModulusPressureDerivative
		{
			get
			{
				throw new System.NotImplementedException();
			}
		}

		public double FittingError
		{
			get
			{
				throw new System.NotImplementedException();
			}
		}

		public double RelativeFittingError
		{
			get
			{
				throw new System.NotImplementedException();
			}
		}
	}*/
}
